package com.example.d8_homework.homework01;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test {
    public static void main(String[] args) {
        // 需求：已知手机的价格是3999, 钢化膜的价格是9.9, 店家促销策略为: 满4000打98折.现在小明买了一台手机和两块钢化膜, 请问小明应该付多少钱(精确到分)
        // 1.定义商品的价格, 使用字符串构造 BigDecimal 以避免不精确的小数表示
        BigDecimal phonePrice = new BigDecimal("3999");
        BigDecimal screenPrice = new BigDecimal("9.9");
        int numberOfScreenProtectors = 2; // 屏幕的购买数量

        // 2.计算原始的总价格
        BigDecimal originalTotalPrice = phonePrice.add(screenPrice.multiply(BigDecimal.valueOf(numberOfScreenProtectors)));

        // 3.计算打折后的价格
        // 注意：BigDecimal.valueOf()只能转换数字,如果要把字符串转成BigDecimal,可以使用new BigDecimal(String)
        BigDecimal finalPrice = applyDiscount(originalTotalPrice, new BigDecimal("4000"), BigDecimal.valueOf(0.98));

        // 4.转回double输出
        System.out.println("原始价格：" + originalTotalPrice.doubleValue());
        System.out.println("打折后价格：" + finalPrice.doubleValue());
    }

    /**
     * 计算打折后的价格
     *
     * @param totalPrice   原始的总价格
     * @param threshold    折扣的门槛值
     * @param discountRate 折扣的比率
     * @return 返回打折后的价格
     */
    private static BigDecimal applyDiscount(BigDecimal totalPrice, BigDecimal threshold, BigDecimal discountRate) {
        if (totalPrice.compareTo(threshold) >= 0) {
            // 说明超过了4000元可以打折
            return totalPrice.multiply(discountRate).setScale(2, RoundingMode.HALF_UP); // 四舍五入保留2位小数
        } else {
            // 说明没有折扣,也保留2位小数
            return totalPrice.setScale(2, RoundingMode.HALF_UP); // RoundingMode.HALF_UP表示四舍五入
        }
    }
}